﻿#pragma once

#include <cstdarg>
#include <cstdio>
#include <fstream>
#include <string>
#include <string_view>

namespace ikit {
// 传入一个文件，修改其扩展名，并且增加后缀。suffix和newExtension均可以接受空字符串，
// 如果参数为空字符串，则不进行修改。比如suffix为空，newExtension不为空，则只修改扩展名。但不能两者全为空。
std::string replace_suffix_extension(const std::string& originalPath,
    std::string_view suffix, std::string_view newExtension);
// 读取一个文件
std::string read_txt_file(const char* filename);
// 获得当前的工作目录
std::string get_current_dir();

time_t get_file_changed(const char* file_path);
// 文件是否以ext为扩展名
bool is_file_ext(const std::string_view& filename, const char* ext);

class file_printer {
private:
  std::ofstream file;
  // 临时BUFF
  char* buffer;

public:
  // 用于非中文的路径
  explicit file_printer(const char* filename);
  // 用于中文的路径
  explicit file_printer(const std::wstring& filename);

  ~file_printer();

  void print(const char* format, ...);         // 可变参数格式化输出
  void println(const char* format, ...);       // 可变参数格式化输出
  void printv(const char* format, va_list ap); // 可变参数格式化输出
  void close();                                // 关闭文件
};

} // namespace ikit